package main

import (
	"log"
	"gateway-api/tools"
)

/*
 +----------------------------------------------------------------------
 + Title        : backupConsumer
 + Author       : huwl
 + Version      : 2.0.0
 + Initial-Time : 2020-11-23
 + Last-time    : 这个文件最后修改的时间 + 修改人的名称
 + Desc         : 备用交换机消费者
 +----------------------------------------------------------------------
*/

// 运行程序命令: go run .\consoles\rabbitMQConsumer\tridentConsumer\backupConsumer\main.go

/**
 * 备用交换机消费者
 *
 * @param string queueName ----------------------------------必传,队列名称
 * @param string consumerName -------------------------------必传,消费者名称
 * @author huwl
 */
func BackupConsumer(queueName, consumerName string) {
	log.Println("------------- backup " + consumerName + " start -------------")

	// 创建RabbitMQ
	rm, err := tools.NewRabbitMQ()
	if err != nil {
		log.Fatalf("Failed to create RabbitMQ: %v", err)
	}

	// 在没有返回ack之前，最多只接收1个消息
	// 设置 prefetch count数值为1，这样只有当消费者消费完消息并返回ack确认后RabbitMQ才会给其分发消息，否则只会将消息分发给其他空闲状态的消费者
	err = rm.Ch.Qos(1, 0, false)
	if err != nil {
		log.Fatalf("Failed to Qos: %v", err)
	}

	// 消费消息
	rm.ConsumeMessage(tools.ConsumerMessageParam{
		Queue:    queueName,    // 队列名称
		Consumer: consumerName, // 消费者名称
		AutoAck:  false,        // true: 自动回复,false: 手动回复
	})
}
func main() {
	go BackupConsumer("trident-backup.queue", "tridentBackConsumer-01")
	go BackupConsumer("trident-backup.queue", "tridentBackConsumer-02")
	BackupConsumer("trident-backup.queue", "tridentBackConsumer-03")
}
